<?php
namespace plugin\ky_black\app\admin\model;

use support\Model;

class BlackCard extends Model
{
    /**
     * 关联到模型的数据表
     *
     * @var string
     */
    protected $table = 'ky_black_card';

    /**
     * 主键
     *
     * @var string
     */
    protected $primaryKey = 'card_id';

    /**
     * 可以批量赋值的属性
     *
     * @var array
     */
    protected $fillable = [
        'card_no',           // 卡号（HK开头）
        'card_type',         // 卡片类型：personal(个人), organization(机构)
        'user_id',           // 所属会员ID
        'org_id',            // 所属机构ID
        'status',            // 状态：0未使用，1已使用，2禁用
        'generate_time',     // 生成时间
        'use_time',         // 使用时间
        'bind_time',        // 绑定时间
        'effect_time',      // 生效时间
        'balance',          // 总额度
        'available_balance', // 可用额度
        'frozen_balance',    // 冻结额度
        'total_consumption', // 累计消费
        'daily_limit',      // 日消费限额
        'monthly_limit'     // 月消费限额
    ];

    /**
     * 类型转换
     *
     * @var array
     */
    protected $casts = [
        'status' => 'integer',
        'balance' => 'decimal:2',
        'available_balance' => 'decimal:2',
        'frozen_balance' => 'decimal:2',
        'total_consumption' => 'decimal:2',
        'daily_limit' => 'decimal:2',
        'monthly_limit' => 'decimal:2',
        'generate_time' => 'datetime',
        'use_time' => 'datetime',
        'bind_time' => 'datetime',
        'effect_time' => 'datetime'
    ];

    /**
     * 关联用户
     */
    public function user()
    {
        return $this->belongsTo(User::class, 'user_id', 'user_id');
    }

    /**
     * 关联机构
     */
    public function organization()
    {
        return $this->belongsTo(Organization::class, 'org_id', 'org_id');
    }

    /**
     * 关联充值记录
     */
    public function rechargeRecords()
    {
        return $this->hasMany(CardRecharge::class, 'card_id', 'card_id');
    }

    /**
     * 关联额度分配记录（作为主卡）
     */
    public function quotaAllocations()
    {
        return $this->hasMany(CardQuotaAllocation::class, 'primary_card_id', 'card_id');
    }

    /**
     * 关联额度分配记录（作为子卡）
     */
    public function receivedQuotas()
    {
        return $this->hasMany(CardQuotaAllocation::class, 'sub_card_id', 'card_id');
    }

    /**
     * 关联额度变更记录
     */
    public function balanceLogs()
    {
        return $this->hasMany(CardBalanceLog::class, 'card_id', 'card_id');
    }
} 